Add WPTs for Scroll To Text security restrictions. This patch adds tests for the specified security restrictions for scroll to text: https://wicg.github.io/ScrollToTextFragment/#should-allow-text-fragment - Test for navigation without a user activation. - Test for window.open() navigation without 'noopener' option. - Test for navigation within an iframe - Test for same document navigations. Tested updated WPT locally with run_web_tests.py --additional-driver-flag= '--enable-blink-features=TextFragmentIdentifiers' Change-Id: Ia70e32a42d629fe6f9ec28b89c3167a1c1efbd8f Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1894302 Reviewed-by: David Bokan <bokan@chromium.org> Commit-Queue: Nick Burris <nburris@chromium.org> Cr-Commit-Position: refs/heads/master@{#712331} diff --git a/scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html b/scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html new file mode 100644 index 0000000..3bfd453 --- /dev/null +++ b/scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html 
@@ -0,0 +1,57 @@ +<!doctype html> +<title>Navigating to a same-document text fragment directive</title> +<meta charset=utf-8> +<link rel="help" href="https://wicg.github.io/ScrollToTextFragment/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script> +function isInView(element) { + let rect = element.getBoundingClientRect(); + return rect.top >= 0 && rect.top <= window.innerHeight; +} + +function checkScroll(resolve) { + let position = 'unknown'; + if (window.scrollY == 0) + position = 'top'; + else if (isInView(document.getElementById('text'))) + position = 'text'; + + resolve(position); +} + +function runTest() { + promise_test(t => new Promise(resolve => { + window.location.href = "#:~:text=test"; + requestAnimationFrame(function() { + checkScroll(resolve); + }); + }).then(position => { + assert_equals(position, 'top'); + assert_equals(window.location.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.'); + }), 'Test that a text fragment directive cannot be activated on a same-document navigation'); + + promise_test(t => new Promise(resolve => { + window.location.href = "#text"; + requestAnimationFrame(function() { + checkScroll(resolve); + }); + }).then(position => { + assert_equals(position, 'text'); + }), 'Sanity check that the text element can be navigated by element ID'); +} +</script> +<style> + body { + height: 3200px; + } + #text { + position: absolute; + top: 3000px; + } +</style> +<body onload="runTest()"> + <p id="text">This is a test page</p> +</body>